package org.jeecg.modules.zhoupackage.controller;

import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.jeecg.common.api.vo.Result;
import org.jeecg.modules.degression.pojo.MlccDataType;
import org.jeecg.modules.degression.pojo.MlccPriceSystemCostRecord;
import org.jeecg.modules.gwcjava.jiekou.entity.MlccUserInfo;
import org.jeecg.modules.zhoupackage.pojo.*;
import org.jeecg.modules.zhoupackage.service.IMySingleOrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletResponse;
import java.util.Date;
import java.util.List;

/**
 * 纽扣
 *
 * @author zxl
 * @since 20200925
 */
@SuppressWarnings("all")
@RestController
@RequestMapping("/fabricAndOther")
public class MySingleOrderController {

    @Autowired
    IMySingleOrderService service;

    /**
     * 获取纽扣查询选项
     *
     * @param moudleId
     * @return
     */
    @RequestMapping("/getButtonSelect")
    public JSONObject getButtonSelect(int moudleId) {
        JSONObject jsonObject = new JSONObject();
        try {
            List<MlccCategoryInfo> buttonSelect = service.getButtonSelect(moudleId);
            jsonObject.put("code", 0);
            jsonObject.put("msg", "查询成功");
            jsonObject.put("data", buttonSelect);
            return jsonObject;
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", 1);
            jsonObject.put("msg", "查询失败");
            return jsonObject;
        }
    }

    /**
     * 获取具体的纽扣信息列表
     *
     * @param buttonTypeId
     * @return
     */
    @RequestMapping("/getButtons")
    public JSONObject getButtons(Integer buttonTypeId) {
        JSONObject jsonObject = new JSONObject();
        try {
            List<MlccButtonsInfo> buttonSelect = service.getButtons(buttonTypeId);
            jsonObject.put("code", 0);
            jsonObject.put("msg", "查询成功");
            jsonObject.put("data", buttonSelect);
            return jsonObject;
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", 1);
            jsonObject.put("msg", "查询失败");
            return jsonObject;
        }
    }

    /**
     * 获取当前用户个订订单
     *
     * @param token
     * @param time
     * @param status
     * @param code
     * @return
     */
    @RequestMapping("/getSingleOrderList")
    public JSONObject getSingleOrderList(String token, @DateTimeFormat(pattern = "yyyy-MM-ss") Date time, Integer status, String code) {
        JSONObject jsonObject = new JSONObject();
        try {
            List<MlccSingleOrderInfo> buttonSelect = service.getSingleOrderList(token, time, status, code);
            if (buttonSelect == null) {
                jsonObject.put("code", 1);
                jsonObject.put("msg", "token无效");
                return jsonObject;
            }
            jsonObject.put("code", 0);
            jsonObject.put("msg", "查询成功");
            jsonObject.put("data", buttonSelect);
            return jsonObject;
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", 1);
            jsonObject.put("msg", "查询失败");
            return jsonObject;
        }
    }

    /**
     * 获取个订订单详情
     *
     * @param token
     * @param orderSn
     * @return
     */
    @RequestMapping("/getDingleOrderDetail")
    public JSONObject getDingleOrderDetail(String token, String orderSn) {
        JSONObject jsonObject = new JSONObject();
        try {
            MlccSingleOrderInfo buttonSelect = service.getDingleOrderDetail(token, orderSn);
            if (buttonSelect == null) {
                jsonObject.put("code", 1);
                jsonObject.put("msg", "token无效");
                return jsonObject;
            }
            jsonObject.put("code", 0);
            jsonObject.put("msg", "查询成功");
            jsonObject.put("data", buttonSelect);
            return jsonObject;
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", 1);
            jsonObject.put("msg", "查询失败");
            return jsonObject;
        }
    }

    /**
     * 个订订单返修
     *
     * @param token
     * @param entity
     * @return
     */
    @RequestMapping("/SingleOrderBack")
    public JSONObject SingleOrderBack(String token, MlccRepairOrderInfo entity) {
        JSONObject jsonObject = new JSONObject();
        int result = service.addSingleOrderRepair(token, entity);
        if (result > 0) {
            jsonObject.put("code", 0);
            jsonObject.put("msg", "创建返修成功");
        } else if (result == -1) {
            jsonObject.put("code", 1);
            jsonObject.put("msg", "token失效");
        } else {
            jsonObject.put("code", 1);
            jsonObject.put("msg", "查询失败");
        }
        return jsonObject;
    }

    /**
     * 个订面料与辅料界面获取面料信息
     *
     * @param token      token
     * @param typeId     0面料，1里布，2底领里
     * @param fabeicCode 面料编号
     * @return
     */
    @RequestMapping("/getSingleFabricList")
    public JSONObject getSingleFabricList(String token, Integer typeId, String fabeicCode) {
        JSONObject jsonObject = new JSONObject();
        try {
            List<MlccFabricInfo> singleFabricList = service.getSingleFabricList(token, typeId, fabeicCode);
            if (singleFabricList == null) {
                jsonObject.put("code", 1);
                jsonObject.put("msg", "token失效");
                return jsonObject;
            }
            jsonObject.put("code", 0);
            jsonObject.put("msg", "查询成功");
            jsonObject.put("data", singleFabricList);
            return jsonObject;
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", 1);
            jsonObject.put("msg", "查询失败");
            return jsonObject;
        }
    }

    /**
     * 未支付个定订单详情
     *
     * @param token
     * @param orderSn
     * @return
     */
    @RequestMapping("/getSingleDetail")
    public JSONObject getSingleDetail(String token, String orderSn) {
        JSONObject jsonObject = new JSONObject();
        try {
            MlccSingleOrderInfo buttonSelect = service.getSingleDetail(token, orderSn);
            if (buttonSelect == null) {
                jsonObject.put("code", 1);
                jsonObject.put("msg", "token无效");
            } else {
                jsonObject.put("code", 0);
                jsonObject.put("msg", "查询成功");
                jsonObject.put("data", buttonSelect);
            }
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", 1);
            jsonObject.put("msg", "查询失败");
        }
        return jsonObject;
    }


    /**
     * 提交订单
     *
     * @param token        令牌
     * @param orderID      订单ID
     * @param remark       备注
     * @param shiyang      式样
     * @param modifiedYang 改款打样
     * @param emergency    紧急状况
     * @param brandLabel   品牌标
     * @param orderMoney   订单金额
     */
    @RequestMapping("/submitOrder")
    public JSONObject submitOrder(String token, int orderID, String remark, String shiyang, String modifiedYang, String emergency, String orderMoney, String brandLabel) {
        JSONObject jsonObject = new JSONObject();
        try {
            int result = service.submitOrder(token, orderID, remark, shiyang, modifiedYang, emergency, orderMoney, brandLabel);
            if (result == -1) {
                jsonObject.put("code", 1);
                jsonObject.put("msg", "token失效");
            } else if (result > 0) {
                jsonObject.put("code", 0);
                jsonObject.put("msg", "提交成功");
            } else {
                jsonObject.put("code", 1);
                jsonObject.put("msg", "提交失败");
            }
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", 1);
            jsonObject.put("msg", "提交失败");
        }
        return jsonObject;
    }

    /**
     * 获取未支付订单详情页面的品牌标
     *
     * @param token
     * @return
     */
    @RequestMapping("/getTitle")
    public JSONObject getTitle(String token) {
        JSONObject jsonObject = new JSONObject();
        try {
            List<String> title = service.getTitle(token);
            if (title == null) {
                jsonObject.put("code", 1);
                jsonObject.put("msg", "token失效");
            } else {
                jsonObject.put("code", 0);
                jsonObject.put("msg", "查询成功");
                jsonObject.put("data", title);
            }
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", 1);
            jsonObject.put("msg", "token失效");
        }
        return jsonObject;
    }

    /**
     * 根据绣字类型查询绣字高度列表
     *
     * @param xiuzitype
     * @return
     */
    @RequestMapping("/getXiuziList")
    public JSONObject getXiuziList(String xiuzitype) {
        JSONObject jsonObject = new JSONObject();
        try {
            List<MlccEmbdtypePrice> list = service.getXiuziList(xiuzitype);
            jsonObject.put("code", 0);
            jsonObject.put("msg", "查询成功");
            jsonObject.put("data", list);
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", 1);
            jsonObject.put("msg", "查询失败");
        }
        return jsonObject;
    }

    /**
     * 查询绣字位置集合
     *
     * @param categoryID 类别ID
     */
    @RequestMapping("/listXiuziHandler")
    public JSONObject listXiuziHandler(String categoryID) {
        JSONObject jsonObject = new JSONObject();
        try {
            List<MlccCategoryLocaltion> types = service.listXiuziHandler(categoryID);
            jsonObject.put("code", "0");
            jsonObject.put("data", types);
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", "1");
            jsonObject.put("msg", "系统异常");
        }
        return jsonObject;
    }

    /**
     * 个订界面获取类别和工艺数据
     *
     * @param mouldid
     * @param typeids
     * @return
     */
    @RequestMapping("/getTypeAndProcess")
    public JSONObject getTypeAndProcess(@RequestParam("token") String token, @RequestParam("mouldid") String mouldid, @RequestParam("typeids") String typeids) {
        JSONObject jsonObject = new JSONObject();
        try {
            List<MlccModuleSmallTemplate> process = service.getTypeAndProcess(token, mouldid, typeids);
            if (process == null) {
                jsonObject.put("code", 1);
                jsonObject.put("msg", "token失效");
            } else {
                jsonObject.put("code", 0);
                jsonObject.put("msg", "查询成功");
                jsonObject.put("data", process);
            }
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", 1);
            jsonObject.put("msg", "查询失败");
        }
        return jsonObject;
    }

    /**
     * 获取驳宽和珠边宽度
     *
     * @param token
     * @param mouldid
     * @return
     */
    @RequestMapping("/getBokuan")
    public JSONObject getBokuan(String token, int mouldid) {
        JSONObject jsonObject = new JSONObject();
        try {
            List<MlccModuleSmallTemplate> process = service.getBokuan(token, mouldid);
            if (process == null) {
                jsonObject.put("code", 1);
                jsonObject.put("msg", "token失效");
            } else {
                jsonObject.put("code", 0);
                jsonObject.put("msg", "查询成功");
                jsonObject.put("data", process);
            }
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", 1);
            jsonObject.put("msg", "查询失败");
        }
        return jsonObject;
    }

    /**
     * 个订模板获取详情
     *
     * @param token
     * @param orderSn
     * @return
     */
    @RequestMapping("/moduleDetail")
    public JSONObject getorderMould(String token, String orderSn) {
        JSONObject jsonObject = new JSONObject();
        try {
            MlccSignModuleInfo buttonSelect = service.getmoduleDetail(token, orderSn);
            if (buttonSelect == null) {
                jsonObject.put("code", 1);
                jsonObject.put("msg", "token无效");
            } else {
                jsonObject.put("code", 0);
                jsonObject.put("msg", "查询成功");
                jsonObject.put("data", buttonSelect);
            }
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", 1);
            jsonObject.put("msg", "查询失败");
        }
        return jsonObject;
    }

    /**
     * 继续填写个订订单
     *
     * @param token   令牌
     * @param orderSn 个订订单编号
     * @return
     */
    @RequestMapping("/continueSingleOrder")
    public JSONObject continueSingleOrder(String token, String orderSn) {
        JSONObject jsonObject = new JSONObject();
        try {
            MlccSingleOrderInfo info = service.continueSingleOrder(token, orderSn);
            if (info == null) {
                jsonObject.put("code", 1);
                jsonObject.put("msg", "token无效");
            } else {
                jsonObject.put("code", 0);
                jsonObject.put("msg", "查询成功");
                jsonObject.put("data", info);
            }
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", 1);
            jsonObject.put("msg", "查询失败");
        }
        return jsonObject;
    }

    /**
     * 用户详情
     *
     * @param token
     * @return
     */
    @RequestMapping("/getUserDetail")
    public JSONObject getUserDetail(String token) {
        JSONObject jsonObject = new JSONObject();
        try {
            MlccUserInfo userDetail = service.getUserDetail(token);
            jsonObject.put("code", 0);
            jsonObject.put("data", userDetail);
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", 1);
            jsonObject.put("msg", e.getMessage());
        }
        return jsonObject;
    }

    /**
     * 查询加价服务列表
     *
     * @param orderSn 个订订单编号
     */
    @RequestMapping("/listJiajia")
    public JSONObject listJiajia(String orderSn) {
        JSONObject jsonObject = new JSONObject();
        try {
            jsonObject = service.listJiajia(orderSn);
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", 1);
            jsonObject.put("msg", "查询失败");
        }
        return jsonObject;
    }

    /**
     * 计算订单价格
     *
     * @param orderPrice   除了加价之外的订单金额
     * @param shiyang      式样（加价服务）
     * @param modifiedYang 改款打样（加价服务）
     * @param emergency    紧急指数（加价服务）
     */
    @RequestMapping("/compudePrice")
    public JSONObject compudePrice(Double orderPrice, String shiyang, String modifiedYang, String emergency) {
        JSONObject jsonObject = new JSONObject();
        try {
            String price = service.compudePrice(orderPrice, shiyang, modifiedYang, emergency);
            jsonObject.put("code", 0);
            jsonObject.put("data", price);
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", 1);
            jsonObject.put("msg", "操作");
        }
        return jsonObject;
    }

    /**
     * 获取面料列表
     *
     * @param pageNo     当前页
     * @param pageSize   页面大小
     * @param fabricCode 面料编号
     * @param type       面料类型
     */
    @RequestMapping("/getFabricListnew")
    public JSONObject getFabricListnew(@RequestParam(name = "pageNo", defaultValue = "1") int pageNo,
                                       @RequestParam(name = "pageSize", defaultValue = "10") int pageSize,
                                       String fabricCode, Integer type) {
        JSONObject jsonObject = new JSONObject();
        Page<MlccFabricInfo> page = new Page<>(pageNo, pageSize);
        try {
            IPage<MlccFabricInfo> result = service.getFabricListnew(page, fabricCode, type);
            jsonObject.put("code", 0);
            jsonObject.put("data", result);
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", 1);
            jsonObject.put("msg", "查询失败");
        }
        return jsonObject;
    }

    /**
     * 保存或更新附加条件
     *
     * @param productid 产品id
     * @param priceid   成本价格ID
     * @param type      上级id
     */
    @RequestMapping("/saveFujia")
    public JSONObject saveFujia(String productid, String priceid, String type) {
        JSONObject jsonObject = new JSONObject();
        try {
            int result = service.saveFujia(productid, priceid, type);
            if (result == -1) {
                jsonObject.put("code", 1);
                jsonObject.put("msg", "token失效");
            } else if (result > 0) {
                jsonObject.put("code", 0);
                jsonObject.put("msg", "提交成功");
            } else {
                jsonObject.put("code", 1);
                jsonObject.put("msg", "提交失败");
            }
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", 1);
            jsonObject.put("msg", "发生异常");
        }
        return jsonObject;
    }

    /**
     * 真·计算个订订单价格
     *
     * @param price   还没有加上附加条件的金额
     * @param orderSn 订单编号
     */
    @RequestMapping("/getallPrice")
    public JSONObject getallPrice(double price, String orderSn) {
        JSONObject jsonObject = new JSONObject();
        try {
            double result = service.getallPrice(price, orderSn);
            jsonObject.put("code", 0);
            jsonObject.put("data", result);
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", 1);
            jsonObject.put("msg", "系统异常");
        }
        return jsonObject;
    }

    /**
     * 获取个订定单的收费服务项（里布、低领尼、纽扣）
     *
     * @param orderSn 个订订单编号
     */
    @RequestMapping("/shouFeifuwuXiang")
    public JSONObject shouFeifuwuXiang(String orderSn) {
        JSONObject jsonObject = null;
        try {
            jsonObject = service.shouFeifuwuXiang(orderSn);
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", 1);
            jsonObject.put("msg", "系统异常");
        }
        return jsonObject;
    }

    /**
     * 获取个订下的产品列表
     *
     * @param orderSn 订单编号
     */
    @RequestMapping("/productList")
    public JSONObject productList(String orderSn) {
        JSONObject jsonObject = new JSONObject();
        try {
            List<MlccProductInfo> productInfoList = service.productList(orderSn);
            jsonObject.put("code", 0);
            jsonObject.put("data", productInfoList);
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", 1);
            jsonObject.put("msg", "系统异常");
        }
        return jsonObject;
    }

    /**
     * 获取个订下的产品列表(用于个订产品发货)
     *
     * @param orderSn 订单编号
     */
    @RequestMapping("/productListfa")
    public JSONObject productListfa(String orderSn) {
        JSONObject jsonObject = new JSONObject();
        try {
            List<MlccProductInfo> productInfoList = service.productListfa(orderSn);
            jsonObject.put("code", 0);
            jsonObject.put("data", productInfoList);
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", 1);
            jsonObject.put("msg", "系统异常");
        }
        return jsonObject;
    }

    /**
     * 个订查询附加条件列表
     *
     * @param orderSn 个订订单编号
     */
    @RequestMapping("/listFujia")
    public JSONObject listFujia(String orderSn) {
        JSONObject jsonObject = new JSONObject();
        try {
            List<MlccPriceSystemCostRecord> records = service.listFujia(orderSn);
            jsonObject.put("code", 0);
            jsonObject.put("data", records);
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", 1);
            jsonObject.put("msg", "系统异常");
        }
        return jsonObject;
    }

    /**
     * 个订产品查询附加条件列表————用于个订加工厂展示
     *
     * @param productid 产品id
     */
    @RequestMapping("/listFujiaByProduct")
    public JSONObject listFujiaByProduct(String productid) {
        JSONObject jsonObject = new JSONObject();
        try {
            List<MlccPriceSystemCostRecord> records = service.listFujiaByProduct(productid);
            jsonObject.put("code", 0);
            jsonObject.put("data", records);
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", 1);
            jsonObject.put("msg", "系统异常");
        }
        return jsonObject;
    }

    /**
     * 个订订单导出产品
     *
     * @param orderSn  订单编号
     * @param response 响应对象
     */
    @RequestMapping("/dingleExcel")
    public void dingleExcel(String orderSn, HttpServletResponse response) throws Exception {
        String filename = "人员列表.xls";
        // 下面几行是为了解决文件名乱码的问题
        response.setHeader("Content-Disposition", "attachment;filename=" + new String(filename.getBytes(), "iso-8859-1"));
        response.setContentType("application/vnd.ms-excel;charset=UTF-8");
        response.setHeader("Pragma", "no-cache");
        response.setHeader("Cache-Control", "no-cache");
        response.setDateHeader("Expires", 0);
        service.dingleExcel(orderSn, response);
    }

    /**
     * 新·个订产品状态更新，获取产品状态
     *
     * @param proid 产品id
     */
    @RequestMapping("/listProductStatus")
    public Result<?> listProductStatus(String proid) {
        try {
            List<MlccDataType> types = service.listProductStatus(proid);
            return Result.ok(types);
        } catch (Exception e) {
            e.printStackTrace();
            return Result.error("查询失败");
        }
    }
}